package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.Comarca;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="comarcaFaces")
@ViewScoped
public class ComarcaFaces extends FacesUtil {
	
	private static final long serialVersionUID = 6741830258527974238L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<Comarca> logicaComarca;
	
	private Comarca comarca = new Comarca();
	private List<Comarca> listaComarca = new ArrayList<>();
	private String comarcaBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaComarca.adicionar(comarca);
				adicionarMensagem("Comarca adicionada com sucesso");
				this.buscarComarca();
				fecharModal("dialogComarca");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Comarca");
		}
	}
	
	public void prepararAdicionar() {
		this.comarca = new Comarca();
		abrirModal("dialogComarca");
	}
	
	public void selecionarRegistro(Long idComarca, boolean editar) {
		try {
			this.comarca = logicaComarca.obterPorId(Comarca.class,idComarca);
			
			if (editar) {
				abrirModal("dialogComarca");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaComarca.editar(this.comarca);
				adicionarMensagem("Comarca editada com sucesso");
				fecharModal("dialogComarca");
				this.buscarComarca();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Comarca");
		}
	}
	
	public void remover() {
		try {
			logicaComarca.remover(Comarca.class, this.comarca.getId());
			adicionarMensagem("Comarca removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarComarca();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Comarca");
		}
	}
	
	public void buscarComarca() {
		if (listaComarca != null) {
			this.listaComarca.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(comarcaBusca)) {
				this.listaComarca =  logicaComarca.buscarTodos(Comarca.class, "numeroComarca");
			} else {
				this.listaComarca = logicaComarca.buscarPorCampo(Comarca.class, "numeroComarca", comarcaBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.comarca.getNumeroComarca())) {
			adicionarMensagem("O campo número comarca é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaComarca(DefaultLogicaContract<Comarca> logicaComarca) {
		this.logicaComarca = logicaComarca;
	}

	public List<Comarca> getListaComarca() {
		return listaComarca;
	}

	public void setListaComarca(List<Comarca> listaComarca) {
		this.listaComarca = listaComarca;
	}

	public String getComarcaBusca() {
		return comarcaBusca;
	}

	public void setComarcaBusca(String ComarcaBusca) {
		this.comarcaBusca = ComarcaBusca;
	}

	public Comarca getComarca() {
		return comarca;
	}

	public void setComarca(Comarca Comarca) {
		this.comarca = Comarca;
	}
	
	
}